package com.zhudi.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zhudi.model.dto.InterfaceModel;
import com.zhudi.model.dto.InterfaceDTO;
import com.zhudi.model.entity.Interface;
import com.zhudi.model.entity.User;
import com.zhudi.model.request.InterfaceAddRequest;
import com.zhudi.model.request.InterfaceSearchRequest;
import com.zhudi.model.request.InterfaceUpdateRequest;
import com.zhudi.model.request.PageRequest;
import com.zhudi.model.vo.InterfaceVO;
import freemarker.template.TemplateException;

import java.io.IOException;

/**
* @author 朱朱朱朱蒂
* @description 针对表【interface(接口表)】的数据库操作Service
* @createDate 2024-04-16 18:19:06
*/
public interface InterfaceService extends IService<Interface> {

    /**
     * 添加接口
     * @param interfaceAddRequest 包含要创建接口的request类
     * @return 新增接口id
     */
    int addInterface(InterfaceAddRequest interfaceAddRequest, User loginUser);

    /**
     * 生成接口类的文件
     *
     * @param interfaceModel 包含接口参数的类
     * @throws IOException IO异常
     * @throws TemplateException 模板异常
     */
    void generateInterfaceClass(InterfaceModel interfaceModel) throws IOException, TemplateException;

    /**
     * 更新某个client的代码
     * @param clientPath client的相对路径
     */
    void updateClient(String clientPath) throws IOException;

    /**
     * 删除接口
     * @param interfaceId 要删除的接口id
     * @param loginUser 登录的用户
     * @return 接口id
     */
    Boolean deleteInterface(Long interfaceId, User loginUser);

    /**
     * 更新接口
     * @param interfaceUpdateRequest 要更新的接口
     * @param loginUser 登录的用户
     * @return 接口id
     */
    int updateInterface(InterfaceUpdateRequest interfaceUpdateRequest, User loginUser);

    /**
     * 分页搜索接口
     * @param interfaceSearchRequest 搜索类
     * @param pageRequest 查询页信息
     * @return 搜索结果
     */
    Page<InterfaceDTO> searchInterface(InterfaceSearchRequest interfaceSearchRequest, PageRequest pageRequest);

    Page<InterfaceVO> listInterfaceByPage(PageRequest pageRequest);

    /**
     * 上线接口
     * @param id 接口id
     * @return 成功为1
     */
    int onlineInterface(Long id);

    /**
     * 下线接口
     * @param id 接口id
     * @return 成功为1
     */
    int offlineInterface(Long id);
}
